package com.Quy.administrator.mybitmapdeal;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;

/**
 * 新添加的测试
 * 步骤1.先设置options.inJustDecodeBounds设置为true之火去边框
 * 在通过options.inSampleSize()目标压缩尺寸进行压缩比率计算
 * 最后在设置options.inJustDecodeBounds为false加载这时候的图片内容是压缩过的
 * Created by Administrator on 2016/7/1.
 */

public class BitMapUtils {
//    private static int width;
//   private static int height;

    /**
     * 封装压缩工具
     * 数据源bYTE[]数组
     * 返回值：Bitmap
     */
    public static Bitmap getBitMapByte(byte[] data, int Width,int Height){
        BitmapFactory.Options options=new BitmapFactory.Options();
        //主要研究options的属性俩个
        //options.inJustDecodeBounds;//是否加载图片的边框信息不加载图片内容true就是内容不加载
        //options.inSampleSize();压缩比例
        //四个参数的最后一个options就是对图片的压缩处理
        options.inJustDecodeBounds=true;
        Bitmap bm= BitmapFactory.decodeByteArray(data,0,data.length,options);
        int outWidth = options.outWidth;//原始的宽度
        int outHeight = options.outHeight;//原始的高度
        //俩种计算比例的方式
        int scalWidth=outWidth/Width;
        int scalHeigh=outHeight/Height;
        int scale=scalWidth<=scalHeigh?scalWidth:scalHeigh;
        //第二种：https://git.oschina.net/chunling/TestApp.git
        int sample=1;
        while(Width<outWidth/2&&Height<outHeight/2){
            outWidth/=2;
            outHeight/=2;
            sample*=2;

            Log.i("123",sample+"...");
        }
        options.inSampleSize=sample;

        /**可以重新设置inPreferredConfig
        * 所以Bitmap.Config的参数也可以起到图片压缩的效果
         * FFFE0000 对比 FF00 //颜色的改变幅度就很大了
        * 默认都是才使用ARGB_8888的模式 1个像素4b  如果100*100 =  100*100 *4b = 40000b /1024 = ?KB
        * 使用Alpha_8的模式 1个像素1b(没有RGB值的图片) 如果100*100 =  100*100 *1b = 10000b /1024 = ?KB
         * 使用ARGB_4444的模式 1个像素2b 如果100*100 =  100*100 *2b = 20000b /1024 = ?KB //图片失真,比较模糊
         * 使用RGB_565的模式   1个像素2b 如果100*100 =  100*100 *2b = 20000b /1024 = ?KB  //图片失真不是很厉害,但是放弃了透明度的效果了
        * 官方推荐使用的ARGB_8888和RGB_565
        * 如果数据源不一样,方法重载就可以了 ,options不需要修改了
         */

        options.inPreferredConfig= Bitmap.Config.RGB_565;
        options.inJustDecodeBounds=false;
        Bitmap lastbm= BitmapFactory.decodeByteArray(data,0,data.length,options);

        return lastbm;
    }
}
